package org.biloxi.player;

import org.biloxi.model.Deck;
import org.biloxi.model.GameState;
import org.biloxi.model.player.PlayerState;
import org.biloxi.player.actions.ActionOptionPair;
import org.biloxi.player.actions.PlayerActionRepository;

/**
 * Interface to a "Player" whether it is a local player,
 * remote player, or AI.
 * 
 * @author Peter.WM.Wong@gmail.com
 */
public abstract class Player {
	
	protected final PlayerActionRepository actions;
	
	public Player(PlayerActionRepository acts) {
		actions = acts;
	}
		
	public abstract PlayerID getID();
	public abstract Deck getDeck();
	
	/**
	 * query the user for what they wish to do
	 */
	public abstract ActionOptionPair<?>[] getAction(GameState gameState, PlayerState playerState);
}
